package com.gufe.utils;

import java.time.DateTimeException;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.time.format.ResolverStyle;

public class CustomDateUtil {
    // 严格模式日期格式器（解决松散解析问题）
    private static final DateTimeFormatter STRICT_FORMATTER = DateTimeFormatter
            .ofPattern("uuuu-MM-dd")
            .withResolverStyle(ResolverStyle.STRICT);

    /**
     * 转换不完整日期格式为完整日期
     * @param input 原始输入（可能为 YYYY 或 YYYY.MM 格式）
     * @return 标准化的 YYYY-MM-dd 格式字符串
     * @throws IllegalArgumentException 格式错误或无效日期时抛出
     */
    public static String parsePartialDate(String input) {
        if (input == null || input.trim().isEmpty()) {
            return null;
        }

        try {
            // 处理纯年份格式（YYYY）
            if (input.matches("^\\d{4}$")) {
                String fullDate = input + "-03-15";  // 补3月15日
                validateDate(fullDate);
                return fullDate;
            }

            // 处理年份+月份格式（YYYY.MM）
            if (input.matches("^\\d{4}\\.\\d{1,2}$")) {
                String[] parts = input.split("\\.");
                String month = String.format("%02d", Integer.parseInt(parts[1]));  // 补零
                String fullDate = parts[0] + "-" + month + "-15";  // 补15日
                validateDate(fullDate);
                return fullDate;
            }

            throw new IllegalArgumentException("Invalid date format: " + input);
        } catch (DateTimeException | IllegalArgumentException e) {
            throw new IllegalArgumentException("日期转换失败: " + e.getMessage());
        }
    }

    /**
     * 验证日期是否合法（严格模式）
     */
    private static void validateDate(String dateStr) {
        LocalDate.parse(dateStr, STRICT_FORMATTER);  // 若非法会抛DateTimeException
    }
}